The processing of graphical or image data in a computer or other data processing system is often extremely computationally expensive, requiring significant memory and processor resources. In many data processing systems, images are represented by arrays of pixel elements, or “pixels,” with each pixel having a “color depth” that defines the total number of color variations that may be represented in each pixel. As the resolution and/or color depth of an image is increased, the perceived quality of an image, which may be reflected in terms of realism, accuracy, sharpness, vibrancy, etc., also increases. Thus, a continuing need has existed for data processing system support of images with increased resolution and/or color depth.
As a general rule, the greater the resolution and/or color depth of an image, the greater amount of image data that is required to represent the image. Moreover, as the amount of image data used to represent an image increases, the amount of computer resources required to store, transmit and manipulate the image also increases.
One specific type of graphic manipulation that typically requires substantial computational resources is that of image rotation. Image rotation has a number of useful benefits such as in converting images between landscape and portrait orientations for display, faxing, copying, and printing purposes. Also, computer aided design, graphics design, image processing and other video and graphical development environments often utilize image rotation to manipulate image data in a user-created document. Moreover, it is envisioned that as hand-held electronic devices become more prevalent, a need will exist for more flexible displays that are capable of displaying an image at different viewing angles to accommodate multiple form factors for a device.
Traditional image rotation algorithms typically are implemented in software, and involve a number of computationally expensive matrix transform operations. Such algorithms are typically limited to operating with rectangular images, such as an entire image stored in a frame buffer. Moreover, due to the substantial computing resources required to perform such matrix transformations, most software-based algorithms are not well suited for use in low power applications such as hand-held devices, wireless telecommunication devices, digital cameras, etc.
To address the excessive resource requirements of most software-based algorithms, attempts have been made to utilize specialized hardware to perform some image rotation functions. For example, specialized memory access circuitry has been utilized to permit non-sequential accesses to a frame buffer to occur such that a frame buffer is read out column by column, rather than row by row, to effectively generate a 90 degree rotated image on a display. Non-sequential accesses to a memory buffer, however, are often inefficient, and may bypass other performance enhancing circuitry such as memory caches and prefetch circuitry, and thus may have a negative impact on performance. Furthermore, such hardware acceleration often is limited to very specialized applications, and as is often limited to servicing only specifically-sized rectangular images.
While the focus by conventional image rotation algorithms on rectangular images is often sufficient in many applications, in some applications, such a focus tends to introduce inefficiencies during image rotation processing. As an example, using conventional image rotation algorithms, an image must be bound by a rectangular area for processing by such algorithms. Where the shape of the germane (non-background) image data in an image is non-rectangular in nature, however, bounding such an area by a rectangle may introduce a substantial amount of whitespace or background data. Most conventional image rotation algorithms, however, are not capable of determining when image data is germane to an image or when such image data constitutes a background color, so all image data in a rectangular area is processed in roughly the same manner. Thus, significant processing resources may be expended rotating image data that is not particularly germane to the actual image being rotated.
Therefore, a significant need continues to exist for a flexible image rotation algorithm that has wide applicability over different applications. In particular, a need exists for an image rotation algorithm that may be utilized in connection with various types of images, including various sizes and shapes of images, and which is adaptable to data processing systems having various hardware and/or software capabilities.